<?php
// +---------------------------------------------------------------------
// | 支付宝支付功能封装
// +---------------------------------------------------------------------
// | composer require yansongda/pay:^2.10 https://pay.yansongda.cn
// +---------------------------------------------------------------------

declare(strict_types=1);

namespace app\common\lib;

use app\common\logic\Config;
use app\common\logic\Snowflake;
use liang\MicroEngine;
use Yansongda\Pay\Pay;

class Alipay
{
    public $alipay;

    /**
     * 构造方法
     */
    public function __construct()
    {
        $alipay = Config::getBatchByType('alipay');
        $config = [
            'app_id'         => $alipay['ali_appid'],
            'notify_url'     => MicroEngine::alipayNotifyUrl(),
            'return_url'     => 'http://yansongda.cn/return.php',
            'ali_public_key' => $alipay['ali_public_key'],          // 支付宝公钥
            'private_key'    => $alipay['ali_private_key'],         // 加密方式： **RSA2**
            // 'log' => [ // optional
            //     'file'     => './logs/alipay.log',
            //     'level'    => 'info',                // 建议生产环境等级调整为 info，开发环境为 debug
            //     'type'     => 'single',              // optional, 可选 daily.
            //     'max_file' => 30,                    // optional, 当 type 为 daily 时有效，默认 30 天
            // ],
            'http' => [ // optional
                'timeout'         => 5.0,
                'connect_timeout' => 5.0,
                // 更多配置项请参考 [Guzzle](https://guzzle-cn.readthedocs.io/zh_CN/latest/request-options.html)
            ],
            'mode' => 'dev', // optional,设置此参数，将进入沙箱模式
        ];
        $this->alipay = Pay::alipay($config);
    }

    /**
     * 扫码支付
     */
    public function scan()
    {
        $order = [
            'out_trade_no' => Snowflake::pay(),
            'total_amount' => mt_rand(0, 100) / 100, // 单位: 元
            'subject'      => 'test subject-刷卡支付',
            'body'         => 'uniacid=' . MicroEngine::getUniacid(),
        ];
        return $this->alipay->scan($order)->qr_code; // 收款码URL地址
    }
}
